#Francesco Lategano - Ottobre 2021 - Miragaia Tail Model

module load: "libmodule-cont-contact";

begin: data;
	problem: initial value;
end: data;

begin: initial value;
	initial time: 0.;
	final time: 2.;
	time step: 1.e-5;

	max iterations: 100;
	tolerance: 1.e-5;

	derivatives tolerance: 1e-4;

	linear solver: naive, colamd, mt, 1.0;

	method: ms, 0.;

	output: counter;

end: initial value;

begin: control data;
	structural nodes:
		+1	# origine
		+42	# vertebre
#		+22	# spine
	;
	rigid bodies:
		+42	# vertebre
#		+22	# spine
	;
	joints:
#		+1
		+1	# origine
		+2	# Vincolo e Locker
		+41	# cartilagini tra le vertebre
		+41	# giunti total joint
#		+22	# giunti spine
	;

output results: netcdf, no text;

end: control data;

#movimento iniziale coda
set: integer MovimentoCoda = 292;

#load variables
include: "Mira_Var.txt";
include: "spine_variabili";

#Set of values for the end of range of motion
set: const real K_lin = 1.5e5; #Rigidezza
set: const real C_lin = 3.5e4; #Smorzamento

#Coefficienti per la funzione di fine corsa
set: real REST = 1.e2;
set: real KAPPA = 1.e4;
set: real EXPONENT = 3./2.;

#Driver che descrive movimento della coda

drive caller: MovimentoCoda,
array, 3,
  cosine, 0.01, 4*pi, 5.*deg2rad, half, 0.,
  cosine, 0.51, 4*pi, -10.*deg2rad, half, 0.,
  cosine, 1.01, 4*pi, 5.*deg2rad, half, 0.;

# include reference system
include: "Mira_Ref.txt";
include: "spine_ref";

begin: nodes;

# Include nodes
include: "Mira_Nodes.txt";
#include: "spine_nodi";

end: nodes;

begin: elements;

#Include bodies
include: "Mira_Bodies.txt";
#include: "spine_corpi";

joint: Clamp_1, total pin joint,
 Locker_O,
  position, reference, node, 0.0395, 0., 0.,
  position orientation, reference, global, eye,
  rotation orientation, reference, node, eye,
# origine_O,
  position, reference, global, 0., 0., 0.,
  position orientation, reference, global, eye,
  rotation orientation, reference, other node, eye,
 position constraint, 1, 1, 1, null,
 orientation constraint, 1, 1, 1, null,
output, no;

joint: Locker, total joint,
 Locker_O,
  position, reference, node, 0.0395, 0., 0.,
  position orientation, reference, node, eye,
  rotation orientation, reference, node, eye,
 nodo_10,
  position, reference, node, -0.0395, 0., 0.,
  position orientation, reference, node, eye,
  rotation orientation, reference, node, eye,
 position constraint, 1, 1, 1, null,
 orientation constraint, 1, 1, 1,
  0., 0., 1.,
	reference, MovimentoCoda,
output, yes;

joint: Giunto_1, total joint,
 nodo_10,
  position, reference, node, 0.0395, 0., 0.,
  position orientation, reference, node, eye,
  rotation orientation, reference, node, eye,
 nodo_20,
  position, reference, node, -0.0395, 0., 0.,
  position orientation, reference, node, eye,
  rotation orientation, reference, node, eye,
 position constraint, 1, 1, 1, null,
 orientation constraint, 1, 1, 1,
	0., 0., 1.,
	reference, MovimentoCoda,
output, yes;

joint: Giunto_2, total joint,
 nodo_20,
  position, reference, node, 0.0395, 0., 0.,
  position orientation, reference, node, eye,
  rotation orientation, reference, node, eye,
 nodo_30,
  position, reference, node, -0.0395, 0., 0.,
  position orientation, reference, node, eye,
  rotation orientation, reference, node, eye,
 position constraint, 1, 1, 1, null,
 orientation constraint, 1, 1, 1,
  0., 0., 1.,
  reference, MovimentoCoda,
output, yes;

joint: Giunto_3, total joint,
 nodo_30,
  position, reference, node, 0.039, 0., 0.,
  position orientation, reference, node, eye,
  rotation orientation, reference, node, eye,
 nodo_40,
  position, reference, node, -0.0345, 0., 0.,
  position orientation, reference, node, eye,
  rotation orientation, reference, node, eye,
 position constraint, 1, 1, 1, null,
 orientation constraint, 1, 1, 1,
  0., 0., 1.,
	reference, MovimentoCoda,
output, yes;

joint: Giunto_4, total joint,
 nodo_40,
  position, reference, node, 0.0345, 0., 0.,
  position orientation, reference, node, eye,
  rotation orientation, reference, node, eye,
 nodo_50,
  position, reference, node, -0.0345, 0., 0.,
  position orientation, reference, node, eye,
  rotation orientation, reference, node, eye,
 position constraint, 1, 1, 1, null,
 orientation constraint, 1, 1, 1,
  0., 0., 1.,
	reference, MovimentoCoda,
output, yes;

joint: Giunto_5, total joint,
 nodo_50,
  position, reference, node, 0.0345, 0., 0.,
  position orientation, reference, node, eye,
  rotation orientation, reference, node, eye,
 nodo_60,
  position, reference, node, -0.0345, 0., 0.,
  position orientation, reference, node, eye,
  rotation orientation, reference, node, eye,
 position constraint, 1, 1, 1, null,
 orientation constraint, 1, 1, 1,
  0., 0., 1.,
	reference, MovimentoCoda,
output, yes;



joint: Giunto_6, total joint,
 nodo_60,
  position, reference, node, 0.035, 0., 0.,
  position orientation, reference, node, eye,
  rotation orientation, reference, node, eye,
 nodo_70,
  position, reference, node, -0.0395, 0., 0.,
  position orientation, reference, node, eye,
  rotation orientation, reference, node, eye,
 position constraint, 1, 1, 1, null,
 orientation constraint, 1, 1, 1,
  0., 0., 1.,
	reference, MovimentoCoda,
output, yes;

joint: Giunto_7, total joint,
 nodo_70,
  position, reference, node, 0.04, 0., 0.,
  position orientation, reference, node, eye,
  rotation orientation, reference, node, eye,
 nodo_80,
  position, reference, node, -0.041, 0., 0.,
  position orientation, reference, node, eye,
  rotation orientation, reference, node, eye,
 position constraint, 1, 1, 1, null,
 orientation constraint, 1, 1, 1,
  0., 0., 1.,
	reference, MovimentoCoda,
output, yes;

#include joints
include: "Mira_Joints.txt";
#include: "spine_giunti";

end: elements;
